import { store } from "../index";
import { defineStore } from "pinia";
// import { getAccessToken, removeToken } from "@/utils/auth";
import { CACHE_KEY, useCache } from "@/hooks/useCache";
// import { getInfo, loginOut } from "@/api/login";

const { wsCache } = useCache();

interface UserVO {
  id: number;
  avatar: string;
  nickname: string;
}
interface UserInfoVO {
  permissions: string[];
  roles: string[];
  isSetUser: boolean;
  user: UserVO;
}

export const useUserStore = defineStore("admin-user", {
  state: (): UserInfoVO => ({
    permissions: [],
    roles: [],
    isSetUser: false,
    user: {
      id: 0,
      avatar: "",
      nickname: ""
    }
  }),
  getters: {
    getPermissions(): string[] {
      return this.permissions;
    },
    getRoles(): string[] {
      return this.roles;
    },
    getIsSetUser(): boolean {
      return this.isSetUser;
    },
    getUser(): UserVO {
      return this.user;
    }
  },
  actions: {
    async setUserInfoAction() {
      // if (!getAccessToken()) {
      //   this.resetState();
      //   return null;
      // }
      let userInfo = wsCache.get(CACHE_KEY.USER);
      if (!userInfo) {
        userInfo = getInfo();
      }
      this.permissions = userInfo.permissions;
      this.roles = userInfo.roles;
      this.user = userInfo.user;
      this.isSetUser = true;
      wsCache.set(CACHE_KEY.USER, userInfo);
    },
    async loginOut() {
      // await loginOut();
      // removeToken();
      wsCache.clear();
      this.resetState();
    },
    resetState() {
      this.permissions = [];
      this.roles = [];
      this.isSetUser = false;
      this.user = {
        id: 0,
        avatar: "",
        nickname: ""
      };
    }
  }
});

const getInfo = () => {
  return {
    permissions: ["all"],
    roles: ["admin"],
    user: {
      id: 1,
      avatar: "https://dpyy.mofangx.com/img/icon_user_default.32d5bf09.png",
      nickname: "lgc"
    }
  };
};

export const useUserStoreWithOut = () => {
  return useUserStore(store);
};
